// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: braces fieldsfirst space lnc
package de.greenrobot.dao.query;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.DaoException;
import de.greenrobot.dao.DaoLog;
import de.greenrobot.dao.InternalQueryDaoAccess;
import de.greenrobot.dao.Property;
import de.greenrobot.dao.internal.SqlUtils;
import de.greenrobot.dao.internal.TableStatements;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
// Referenced classes of package de.greenrobot.dao.query:
// WhereCondition, Query, CountQuery, DeleteQuery,
// CloseableListIterator, LazyList
public class QueryBuilder
{
public static boolean LOG_SQL;
public static boolean LOG_VALUES;
private final AbstractDao dao;
private StringBuilder joinBuilder;
private Integer limit;
private Integer offset;
private StringBuilder orderBuilder;
private final String tablePrefix;
private final List values;
private final List whereConditions;
protected QueryBuilder(AbstractDao abstractdao)
{
this(abstractdao, "T");
}
protected QueryBuilder(AbstractDao abstractdao, String s)
{
dao = abstractdao;
tablePrefix = s;
values = new ArrayList();
whereConditions = new ArrayList();
}
private void appendWhereClause(StringBuilder stringbuilder, String s)
{
values.clear();
if (!whereConditions.isEmpty())
{
stringbuilder.append(" WHERE ");
WhereCondition wherecondition;
for (ListIterator listiterator = whereConditions.listIterator(); listiterator.hasNext(); wherecondition.appendValuesTo(values))
{
if (listiterator.hasPrevious())
{
stringbuilder.append(" AND ");
}
wherecondition = (WhereCondition)listiterator.next();
wherecondition.appendTo(stringbuilder, s);
}
}
}
private void checkOrderBuilder()
{
if (orderBuilder == null)
{
orderBuilder = new StringBuilder();
} else
if (orderBuilder.length() > 0)
{
orderBuilder.append(",");
return;
}
}
public static QueryBuilder internalCreate(AbstractDao abstractdao)
{
return new QueryBuilder(abstractdao);
}
private transient void orderAscOrDesc(String s, Property aproperty[])
{
int i = aproperty.length;
for (int j = 0; j < i; j++)
{
Property property = aproperty[j];
checkOrderBuilder();
append(orderBuilder, property);
if (java/lang/String.equals(property.type))
{
orderBuilder.append(" COLLATE LOCALIZED");
}
orderBuilder.append(s);
}
}
protected void addCondition(StringBuilder stringbuilder, List list1, WhereCondition wherecondition)
{
checkCondition(wherecondition);
wherecondition.appendTo(stringbuilder, tablePrefix);
wherecondition.appendValuesTo(list1);
}
public transient WhereCondition and(WhereCondition wherecondition, WhereCondition wherecondition1, WhereCondition awherecondition[])
{
return combineWhereConditions(" AND ", wherecondition, wherecondition1, awherecondition);
}
protected StringBuilder append(StringBuilder stringbuilder, Property property)
{
checkProperty(property);
stringbuilder.append(tablePrefix).append('.').append('\'').append(property.columnName).append('\'');
return stringbuilder;
}
public Query build()
{
int i = -1;
String s;
StringBuilder stringbuilder;
int j;
if (joinBuilder == null || joinBuilder.length() == 0)
{
s = InternalQueryDaoAccess.getStatements(dao).getSelectAll();
} else
{
s = SqlUtils.createSqlSelect(dao.getTablename(), tablePrefix, dao.getAllColumns());
}
stringbuilder = new StringBuilder(s);
appendWhereClause(stringbuilder, tablePrefix);
if (orderBuilder != null && orderBuilder.length() > 0)
{
stringbuilder.append(" ORDER BY ").append(orderBuilder);
}
String s1;
if (limit != null)
{
stringbuilder.append(" LIMIT ?");
values.add(limit);
j = -1 + values.size();
} else
{
j = i;
}
if (offset != null)
{
if (limit == null)
{
throw new IllegalStateException("Offset cannot be set without limit");
}
stringbuilder.append(" OFFSET ?");
values.add(offset);
i = -1 + values.size();
}
s1 = stringbuilder.toString();
if (LOG_SQL)
{
DaoLog.d((new StringBuilder()).append("Built SQL for query: ").append(s1).toString());
}
if (LOG_VALUES)
{
DaoLog.d((new StringBuilder()).append("Values for query: ").append(values).toString());
}
return Query.create(dao, s1, values.toArray(), j, i);
}
public CountQuery buildCount()
{
StringBuilder stringbuilder = new StringBuilder(SqlUtils.createSqlSelectCountStar(dao.getTablename(), tablePrefix));
appendWhereClause(stringbuilder, tablePrefix);
String s = stringbuilder.toString();
if (LOG_SQL)
{
DaoLog.d((new StringBuilder()).append("Built SQL for count query: ").append(s).toString());
}
if (LOG_VALUES)
{
DaoLog.d((new StringBuilder()).append("Values for count query: ").append(values).toString());
}
return CountQuery.create(dao, s, values.toArray());
}
public DeleteQuery buildDelete()
{
String s = dao.getTablename();
StringBuilder stringbuilder = new StringBuilder(SqlUtils.createSqlDelete(s, null));
appendWhereClause(stringbuilder, tablePrefix);
String s1 = stringbuilder.toString().replace((new StringBuilder()).append(tablePrefix).append(".'").toString(), (new StringBuilder()).append(s).append(".'").toString());
if (LOG_SQL)
{
DaoLog.d((new StringBuilder()).append("Built SQL for delete query: ").append(s1).toString());
}
if (LOG_VALUES)
{
DaoLog.d((new StringBuilder()).append("Values for delete query: ").append(values).toString());
}
return DeleteQuery.create(dao, s1, values.toArray());
}
protected void checkCondition(WhereCondition wherecondition)
{
if (wherecondition instanceof WhereCondition.PropertyCondition)
{
checkProperty(((WhereCondition.PropertyCondition)wherecondition).property);
}
}
protected void checkProperty(Property property)
{
if (dao != null)
{
Property aproperty[] = dao.getProperties();
int i = aproperty.length;
int j = 0;
label0:
do
{
label1:
{
boolean flag = false;
if (j < i)
{
if (property != aproperty[j])
{
break label1;
}
flag = true;
}
if (!flag)
{
throw new DaoException((new StringBuilder()).append("Property '").append(property.name).append("' is not part of ").append(dao).toString());
}
break label0;
}
j++;
} while (true);
}
}
protected transient WhereCondition combineWhereConditions(String s, WhereCondition wherecondition, WhereCondition wherecondition1, WhereCondition awherecondition[])
{
StringBuilder stringbuilder = new StringBuilder("(");
ArrayList arraylist = new ArrayList();
addCondition(stringbuilder, arraylist, wherecondition);
stringbuilder.append(s);
addCondition(stringbuilder, arraylist, wherecondition1);
int i = awherecondition.length;
for (int j = 0; j < i; j++)
{
WhereCondition wherecondition2 = awherecondition[j];
stringbuilder.append(s);
addCondition(stringbuilder, arraylist, wherecondition2);
}
stringbuilder.append(')');
return new WhereCondition.StringCondition(stringbuilder.toString(), arraylist.toArray());
}
public long count()
{
return buildCount().count();
}
public QueryBuilder join(Class class1, Property property)
{
throw new UnsupportedOperationException();
}
public QueryBuilder joinToMany(Class class1, Property property)
{
throw new UnsupportedOperationException();
}
public QueryBuilder limit(int i)
{
limit = Integer.valueOf(i);
return this;
}
public List list()
{
return build().list();
}
public CloseableListIterator listIterator()
{
return build().listIterator();
}
public LazyList listLazy()
{
return build().listLazy();
}
public LazyList listLazyUncached()
{
return build().listLazyUncached();
}
public QueryBuilder offset(int i)
{
offset = Integer.valueOf(i);
return this;
}
public transient WhereCondition or(WhereCondition wherecondition, WhereCondition wherecondition1, WhereCondition awherecondition[])
{
return combineWhereConditions(" OR ", wherecondition, wherecondition1, awherecondition);
}
public transient QueryBuilder orderAsc(Property aproperty[])
{
orderAscOrDesc(" ASC", aproperty);
return this;
}
public QueryBuilder orderCustom(Property property, String s)
{
checkOrderBuilder();
append(orderBuilder, property).append(' ');
orderBuilder.append(s);
return this;
}
public transient QueryBuilder orderDesc(Property aproperty[])
{
orderAscOrDesc(" DESC", aproperty);
return this;
}
public QueryBuilder orderRaw(String s)
{
checkOrderBuilder();
orderBuilder.append(s);
return this;
}
public Object unique()
{
return build().unique();
}
public Object uniqueOrThrow()
{
return build().uniqueOrThrow();
}
public transient QueryBuilder where(WhereCondition wherecondition, WhereCondition awherecondition[])
{
whereConditions.add(wherecondition);
int i = awherecondition.length;
for (int j = 0; j < i; j++)
{
WhereCondition wherecondition1 = awherecondition[j];
checkCondition(wherecondition1);
whereConditions.add(wherecondition1);
}
return this;
}
public transient QueryBuilder whereOr(WhereCondition wherecondition, WhereCondition wherecondition1, WhereCondition awherecondition[])
{
whereConditions.add(or(wherecondition, wherecondition1, awherecondition));
return this;
}
}